﻿///////////////////////////////////////////////////////////////////////////////
//
// This file is part of the BassDrop project
//   https://code.google.com/p/bass-drop/
//
//
// Creator:	Gergely Krajcsovszki (krajcsovszkig@hotmail.com)
// Date:	2013-07-27 13:45
//
//
// Copyright © 2013-2014. Gergely Krajcsovszki
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
///////////////////////////////////////////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace BassDrop.Core.Common.Localization
{
	/// <summary>
	/// Class containing the strings used in the program
	/// </summary>
	public static partial class Strings
	{
		/// <summary>
		/// Loads the strings for the labels on the UI, buttons, etc.
		/// </summary>
		/// <param name="strings">the xml node containing the localized strings</param>
		private static void LoadLabelStrings( XElement strings )
		{
			SetProperty( strings, "LabelButtonOK", "OK" );
			SetProperty( strings, "LabelButtonCancel", "Cancel" );
			SetProperty( strings, "LabelMoreInfo", "More information" );

			SetProperty( strings, "LabelMetadataTitle", "Title" );
			SetProperty( strings, "LabelMetadataAlbum", "Album" );
			SetProperty( strings, "LabelMetadataArtist", "Artist" );
			SetProperty( strings, "LabelMetadataFilePath", "File path" );

			SetProperty( strings, "LabelErrorDialogTitle", "Error occured" );
			SetProperty( strings, "LabelErrorDialogButtonCopyErrorReport", "Copy report" );
			SetProperty( strings, "LabelErrorDialogExpanderMoreInfo", "More information" );
			SetProperty( strings, "LabelErrorDialogExpanderLessInfo", "Less information" );
			SetProperty( strings, "LabelReportError", "If you believe this is an error in the application, please report it at krajcsovszkig@hotmail.com, attaching a copy of the error report." );

			SetProperty( strings, "LabelMainWindowTitle", "BassDrop" );
			SetProperty( strings, "LabelMainWindowRadioButtonNowPlaying", "Now Playing" );
			SetProperty( strings, "LabelMainWindowRadioButtonMediaLibrary", "Media Library" );
			SetProperty( strings, "LabelMainWindowRadioButtonPlaylists", "Playlists" );
			SetProperty( strings, "LabelMainWindowRadioButtonClouds", "Clouds" );
			SetProperty( strings, "LabelMainWindowRadioButtonSettings", "Settings" );

			SetProperty( strings, "LabelAboutViewTextBlockAssemblyProductFormat", "Product: {0}" );
			SetProperty( strings, "LabelAboutViewTextBlockAssemblyVersionFormat", "Version {0}" );
			SetProperty( strings, "LabelAboutViewTextBlockAssemblyCompanyFormat", "By {0}" );
			SetProperty( strings, "LabelAboutViewTextBlockAssemblyCopyrightFormat", "{0}" );
			SetProperty( strings, "LabelAboutViewTextBlockAssemblyDescriptionFormat", "{0}" );

			SetProperty( strings, "LabelMediaLibraryViewCheckBoxShowLocalMedia", "Show local media" );
			SetProperty( strings, "LabelMediaLibraryViewCheckBoxShowCloudMedia", "Show cloud media" );
			SetProperty( strings, "LabelMediaLibraryViewCheckBoxShowUnavailableMedia", "Show unavailable media" );

			SetProperty( strings, "LabelPlaylistCreationNameInputDescription", "Please enter a name for the playlist" );
			SetProperty( strings, "LabelPlaylistCreationNameInputCaption", "Name the new playlist" );

			SetProperty( strings, "LabelSettingsViewTreeViewItemGeneral", "General" );
			SetProperty( strings, "LabelSettingsViewTreeViewItemPlaylistDisplay", "Playlist display" );
			SetProperty( strings, "LabelSettingsViewTreeViewItemPlugins", "Plugins" );
			SetProperty( strings, "LabelSettingsViewTreeViewItemAbout", "About" );

			SetProperty( strings, "LabelOptionsSetGeneralLanguage", "Language" );
			SetProperty( strings, "LabelOptionsSetDisplayOptionsExpandDetailsOnSelect", "Show details for the selected item" );
			SetProperty( strings, "LabelOptionsSetCloudMakeDefault", "Make this the default cloud provider" );
			SetProperty( strings, "LabelOptionsSetCloudMakeDefaultDescription", "Make this the default cloud provider, that stores the application settings and everything else by default." );
			SetProperty( strings, "LabelOptionsSetCloudIsDefault", "This is currently the default cloud provider" );
			SetProperty( strings, "LabelOptionsSetCloudUnlink", "Unlink cloud account" );
			SetProperty( strings, "LabelOptionsSetCloudUnlinkDescription", "Unlink this cloud account from the application." );
			SetProperty( strings, "LabelOptionsSetCloudUnlinkQuestion", "Are you sure you want to remove this cloud instance? This will delete all of its settings." );

			SetProperty( strings, "LabelCloudUIButtonActionManage", "Manage" );
			SetProperty( strings, "LabelCloudUIButtonActionCreate", "New account" );

			SetProperty( strings, "LabelCloudStatusControlMenuItemLastUpdatedFormat", "Last synchronized {0:d' day(s) 'h' hour(s) 'm' minute(s) 's' second(s)'} ago" );
			SetProperty( strings, "LabelCloudStatusControlAccountInfoTooltipFormat", "{0:0.000} GiB free, {1:0.000} GiB ({2:0.0}%) used of {3:0.000} GiB space." );
			SetProperty( strings, "LabelCloudStatusControlMenuItemErrors", "Errors" );
			SetProperty( strings, "LabelCloudStatusControlMenuItemDismissErrors", "Dismiss all" );
			SetProperty( strings, "LabelCloudStatusControlMenuItemClouds", "Clouds" );
			SetProperty( strings, "LabelCloudStatusControlMenuItemSynchronize", "Synchronize" );
			SetProperty( strings, "LabelCloudStatusControlButton", "Cloud synchronization" );

			SetProperty( strings, "LabelCloudSettingsAccount", "Account:" );
			SetProperty( strings, "LabelCloudSettingsNoAccount", "Not connected" );

			SetProperty( strings, "LabelPlaylistPanelExpandDetails", "Expand details" );
			SetProperty( strings, "LabelPlaylistPanelResetOrder", "Reset original ordering" );
			SetProperty( strings, "LabelPlaylistPanelSaveOrder", "Save ordering" );
			SetProperty( strings, "LabelPlaylistPanelTrackError", "Error:" );

			SetProperty( strings, "LabelAboutViewLoadedPlugins", "Loaded plugins:" );
			SetProperty( strings, "LabelAboutViewThirdPartyContent", "List of third party components used:" );

			SetProperty( strings, "LabelCloudsViewAvailableProviders", "Available providers:" );
			SetProperty( strings, "LabelCloudsViewConnectedAccounts", "Connected accounts:" );

			SetProperty( strings, "LabelNowPlayingViewSavePlaylist", "Save playlist" );

			SetProperty( strings, "LabelPlaylistsViewNewPlaylist", "New playlist" );

			SetProperty( strings, "LabelCustomOptionsViewNoItems", "No options are available for this item" );
		}

		#region General

		/// <summary>
		/// Label for OK buttons
		/// </summary>
		public static string LabelButtonOK
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for Cancel buttons
		/// </summary>
		public static string LabelButtonCancel
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for items providing more information
		/// </summary>
		public static string LabelMoreInfo
		{
			get;
			private set;
		}

		#endregion General

		#region Metadata

		/// <summary>
		/// Label for title attribute displays
		/// </summary>
		public static string LabelMetadataTitle
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for album attribute displays
		/// </summary>
		public static string LabelMetadataAlbum
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for artist attribute displays
		/// </summary>
		public static string LabelMetadataArtist
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for file path attribute displays
		/// </summary>
		public static string LabelMetadataFilePath
		{
			get;
			private set;
		}

		#endregion Metadata

		#region Errors

		/// <summary>
		/// Label for error dialogs
		/// </summary>
		public static string LabelErrorDialogTitle
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the button used to copy the error report
		/// </summary>
		public static string LabelErrorDialogButtonCopyErrorReport
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the collapsed expander containing detailed error information
		/// </summary>
		public static string LabelErrorDialogExpanderMoreInfo
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the expanded expander containing detailed error information
		/// </summary>
		public static string LabelErrorDialogExpanderLessInfo
		{
			get;
			private set;
		}

		/// <summary>
		/// Label prompting the user to report an error
		/// </summary>
		public static string LabelReportError
		{
			get;
			private set;
		}

		#endregion Errors

		#region Main window

		/// <summary>
		/// Label for the main window title
		/// </summary>
		public static string LabelMainWindowTitle
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the now playing button on the main window
		/// </summary>
		public static string LabelMainWindowRadioButtonNowPlaying
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the now playing button on the main window
		/// </summary>
		public static string LabelMainWindowRadioButtonMediaLibrary
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the now playing button on the main window
		/// </summary>
		public static string LabelMainWindowRadioButtonPlaylists
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the now playing button on the main window
		/// </summary>
		public static string LabelMainWindowRadioButtonClouds
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the now playing button on the main window
		/// </summary>
		public static string LabelMainWindowRadioButtonSettings
		{
			get;
			private set;
		}

		#endregion Main window

		#region About view

		/// <summary>
		/// Label format for the product labels on the about view
		/// </summary>
		public static string LabelAboutViewTextBlockAssemblyProductFormat
		{
			get;
			private set;
		}

		/// <summary>
		/// Label format for the version labels on the about view
		/// </summary>
		public static string LabelAboutViewTextBlockAssemblyVersionFormat
		{
			get;
			private set;
		}

		/// <summary>
		/// Label format for the company labels on the about view
		/// </summary>
		public static string LabelAboutViewTextBlockAssemblyCompanyFormat
		{
			get;
			private set;
		}

		/// <summary>
		/// Label format for the copyright labels on the about view
		/// </summary>
		public static string LabelAboutViewTextBlockAssemblyCopyrightFormat
		{
			get;
			private set;
		}

		/// <summary>
		/// Label format for the description labels on the about view
		/// </summary>
		public static string LabelAboutViewTextBlockAssemblyDescriptionFormat
		{
			get;
			private set;
		}

		#endregion About view

		#region Media library view

		/// <summary>
		/// Label for the show local media checkbox on the media library view
		/// </summary>
		public static string LabelMediaLibraryViewCheckBoxShowLocalMedia
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the show cloud media checkbox on the media library view
		/// </summary>
		public static string LabelMediaLibraryViewCheckBoxShowCloudMedia
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the show unavailable media checkbox on the media library view
		/// </summary>
		public static string LabelMediaLibraryViewCheckBoxShowUnavailableMedia
		{
			get;
			private set;
		}

		#endregion Media library view

		#region Playlist handling

		/// <summary>
		/// Description for input dialogs asking for the name of the new playlist
		/// </summary>
		public static string LabelPlaylistCreationNameInputDescription
		{
			get;
			private set;
		}

		/// <summary>
		/// Title for input dialogs asking for the name of the new playlist
		/// </summary>
		public static string LabelPlaylistCreationNameInputCaption
		{
			get;
			private set;
		}

		#endregion Playlist handling

		#region Settings view

		/// <summary>
		/// Label for the general item on the settings view
		/// </summary>
		public static string LabelSettingsViewTreeViewItemGeneral
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the playlist display item on the settings view
		/// </summary>
		public static string LabelSettingsViewTreeViewItemPlaylistDisplay
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the plugins item on the settings view
		/// </summary>
		public static string LabelSettingsViewTreeViewItemPlugins
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the about item on the settings view
		/// </summary>
		public static string LabelSettingsViewTreeViewItemAbout
		{
			get;
			private set;
		}

		#endregion Settings view

		#region Options

		/// <summary>
		/// Label for the language chooser in the general options set
		/// </summary>
		public static string LabelOptionsSetGeneralLanguage
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the option of automatically expanding the details of the selected playlist item in the playlist display options set
		/// </summary>
		public static string LabelOptionsSetDisplayOptionsExpandDetailsOnSelect
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the option of making the currently edited cloud instance the default one
		/// </summary>
		public static string LabelOptionsSetCloudMakeDefault
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the description of the option of making the currently edited cloud instance the default one
		/// </summary>
		public static string LabelOptionsSetCloudMakeDefaultDescription
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for displaying that the currently edited cloud instance is the default one
		/// </summary>
		public static string LabelOptionsSetCloudIsDefault
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the option of removing the currently edited cloud instance from the list
		/// </summary>
		public static string LabelOptionsSetCloudUnlink
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the description of the option of removing the currently edited cloud instance from the list
		/// </summary>
		public static string LabelOptionsSetCloudUnlinkDescription
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for asking the user if they really mean to remove the currently edited cloud instance
		/// </summary>
		public static string LabelOptionsSetCloudUnlinkQuestion
		{
			get;
			private set;
		}

		#endregion Options

		#region Cloud UI

		/// <summary>
		/// Label for the action button on the cloud UI for a cloud provider instance
		/// </summary>
		public static string LabelCloudUIButtonActionManage
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the action button on the cloud UI for a cloud provider
		/// </summary>
		public static string LabelCloudUIButtonActionCreate
		{
			get;
			private set;
		}

		#endregion Cloud UI

		#region Cloud status control

		/// <summary>
		/// Label format for the menu item displaying the time of the last synchronization in the context menu of the cloud status control
		/// </summary>
		public static string LabelCloudStatusControlMenuItemLastUpdatedFormat
		{
			get;
			private set;
		}

		/// <summary>
		/// Label format for a tooltip displaying information about an account in the context menu of the cloud status control
		/// </summary>
		public static string LabelCloudStatusControlAccountInfoTooltipFormat
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the menu item containing the list of errors in the context menu of the cloud status control
		/// </summary>
		public static string LabelCloudStatusControlMenuItemErrors
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the menu item dismissing all errors in the context menu of the cloud status control
		/// </summary>
		public static string LabelCloudStatusControlMenuItemDismissErrors
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the menu item containing the list of active cloud accounts in the context menu of the cloud status control
		/// </summary>
		public static string LabelCloudStatusControlMenuItemClouds
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the menu item starting a synchronization in the context menu of the cloud status control
		/// </summary>
		public static string LabelCloudStatusControlMenuItemSynchronize
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the button of the cloud status control
		/// </summary>
		public static string LabelCloudStatusControlButton
		{
			get;
			private set;
		}

		#endregion Cloud status control

		#region Cloud Settings

		/// <summary>
		/// Label for the connected account information on the settings page of a cloud provider instance
		/// </summary>
		public static string LabelCloudSettingsAccount
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the connected account information on the settings page of a cloud provider instance displayed when no account is connected
		/// </summary>
		public static string LabelCloudSettingsNoAccount
		{
			get;
			private set;
		}

		#endregion Cloud Settings

		#region Playlist panel

		/// <summary>
		/// Label for the expand row details checkbox on the playlist panel
		/// </summary>
		public static string LabelPlaylistPanelExpandDetails
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the reset original order button on the playlist panel
		/// </summary>
		public static string LabelPlaylistPanelResetOrder
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the save current order button on the playlist panel
		/// </summary>
		public static string LabelPlaylistPanelSaveOrder
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the error message about a track on the playlist panel
		/// </summary>
		public static string LabelPlaylistPanelTrackError
		{
			get;
			private set;
		}

		#endregion Playlist panel

		#region About view

		/// <summary>
		/// Label for the list of loaded plugins on the about view
		/// </summary>
		public static string LabelAboutViewLoadedPlugins
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the list of third party components on the about view
		/// </summary>
		public static string LabelAboutViewThirdPartyContent
		{
			get;
			private set;
		}

		#endregion About view

		#region Clouds view

		/// <summary>
		/// Label for the list of available providers on the clouds view
		/// </summary>
		public static string LabelCloudsViewAvailableProviders
		{
			get;
			private set;
		}

		/// <summary>
		/// Label for the list of connected accounts on the clouds view
		/// </summary>
		public static string LabelCloudsViewConnectedAccounts
		{
			get;
			private set;
		}

		#endregion Clouds view

		#region Now playing view

		/// <summary>
		/// Label for the save playlist button on the now playing view
		/// </summary>
		public static string LabelNowPlayingViewSavePlaylist
		{
			get;
			private set;
		}

		#endregion Now playing view

		#region Playlists view

		/// <summary>
		/// Label for the new playlist button on the playlists view
		/// </summary>
		public static string LabelPlaylistsViewNewPlaylist
		{
			get;
			private set;
		}

		#endregion Playlists view

		#region Custom options view

		/// <summary>
		/// Label displayed on the custom options view when there are no options in the referenced options set
		/// </summary>
		public static string LabelCustomOptionsViewNoItems
		{
			get;
			private set;
		}

		#endregion Custom options view
	}
}
